package ws;

import java.util.ArrayList;
import java.util.Collection;



import org.orm.PersistentException;
import org.orm.PersistentTransaction;

import soaVO.ComunaVO;
import soaVO.EstablecimientoVO;
import soaVO.EvaluacionVO;


import com.google.gson.Gson;




public class EvaluacionSOA {
	private static final int ROW_COUNT = 100;
	/**
	 * entrega los establecimietos segun los parametros
	 * @param agno int
	 * @param region String
	 * @param comuna String
	 * @param dependencia String
	 * @return String
	 * @throws PersistentException
	 */
	public String obtenerevaluacion(int agno, String region, String comuna , String dependencia) throws PersistentException{

		String json = null;
		String resultado = "";
	    Collection<soaVO.EstablecimientoVO> coleccionestablecimientos = new ArrayList<soaVO.EstablecimientoVO>();
		PersistentTransaction t = orm.EvaluacionDocentePersistentManager.instance().getSession().beginTransaction();
	  if(agno == 0  || region.equals("") || region.equals(null)|| comuna.equals("") 
			  || comuna.equals(null) || dependencia.equals("") || dependencia.equals(null)){
		  resultado = "los no se ingresaron correctamente";
	  }
	  
		  try{
		
		orm.DAOFactory lDAOFactory = orm.DAOFactory.getDAOFactory();
		orm.Evaluacion[] ormEvaluacions = lDAOFactory.getEvaluacionDAO().listEvaluacionByQuery("ev_agno="+agno, null);
		int length = Math.min(ormEvaluacions.length, ROW_COUNT);
	
		if(length ==0){
			resultado = "no se encontraron datos con los datos especificacdos";
			
		} else{
			
		    for (int i = 0; i < length; i++) {
		  
		  if( ormEvaluacions[i].getEv_nombre_region().equals(region) 
				  && ormEvaluacions[i].getEv_nombre_comuna().equals(comuna) && ormEvaluacions[i].getEv_dependencia().equals(dependencia)){
			  EstablecimientoVO establecimiento = new EstablecimientoVO();
			      establecimiento = EstablecimientoVO.crearEstablecimientoVO(ormEvaluacions[i]);
		          coleccionestablecimientos.add(establecimiento);	  
		  } 	  
		  }

		
		Gson gson = new Gson();
		json = gson.toJson(coleccionestablecimientos); 
		}
		
		 }
	     catch (PersistentException e){
		e.printStackTrace();
		
	}
	
	return json;
	}
	
	/**
	 * devuelve las comunas segun region
	 * @param idRegion String
	 * @return String
	 */
	public String obtenercomunas(String idRegion) throws PersistentException{
		String json= null;
		String resultado = "";
		Collection<ComunaVO> b = new ArrayList<ComunaVO>();
	//	Collection<orm.Region> c = new ArrayList<orm.Region>();
		try{
		orm.DAOFactory lDAOFactory = orm.DAOFactory.getDAOFactory();
		orm.Comuna[] ormComunas = lDAOFactory.getComunaDAO().listComunaByQuery("regionre_numeroregion='"+idRegion+"'", null);
		int leng = Math.min(ormComunas.length, ROW_COUNT);
		for (int i = 0; i < leng; i++) {	
			ComunaVO comuna = ComunaVO.crearComuna(ormComunas[i]);
			b.add(comuna);
		}
		Gson gson = new Gson();
		json = gson.toJson(b); 
		}
		
		catch (PersistentException e){
			e.printStackTrace();
		}
		return json;
			}
	
	 public String obtenerresultados(int agno,String establecimiento ){
		 String json = null;
         String resultado = "";
			Collection<EvaluacionVO> evaluacions = new ArrayList<EvaluacionVO>();
		 try{
	    orm.DAOFactory lDAOFactory = orm.DAOFactory.getDAOFactory();
	    orm.Evaluacion[] ormEvaluacion= lDAOFactory.getEvaluacionDAO().listEvaluacionByQuery("ev_nombre_establecimiento='"+establecimiento+"'", null);
	    int length = Math.min(ormEvaluacion.length, ROW_COUNT);
	    if( length == 0){
	    	resultado = "no se encontraron datos";
	    	
	    } else{
		for (int i = 0; i < length; i++) {
			if(ormEvaluacion[i].getEv_agno()==agno){
					EvaluacionVO  evaluacion  = EvaluacionVO.crearEvaluacion(ormEvaluacion[i]);
					evaluacions.add(evaluacion);
					}
		  }
			Gson gson = new Gson();
			json = gson.toJson(evaluacions); 
			}}
			
			catch (PersistentException e){
				e.printStackTrace();
			}
		 return json;
		 
	 }
	 /**
	  * entrega los resultados de evaluacion por rbd
	  * @param rbd
	  * @param establecimieton
	  * @return
	  */
	 public String obtenerresultadorbd(String rbd, String establecimieto ) throws PersistentException{
		 String json = null;
		 String resultado = "";
			Collection<EvaluacionVO> evaluacions = new ArrayList<EvaluacionVO>();
		 try{
	    orm.DAOFactory lDAOFactory = orm.DAOFactory.getDAOFactory();
	    orm.Evaluacion[] ormEvaluacion= lDAOFactory.getEvaluacionDAO().listEvaluacionByQuery("ev_rbd = '"+rbd+"'" , null);
	    int length = Math.min(ormEvaluacion.length, ROW_COUNT);
	    
	    if( length == 0){
	    	resultado = "no se encontraron datos";
	    	
	    } else{
		for (int i = 0; i < length; i++) {
			if (ormEvaluacion[i].getEv_nombre_establecimiento().equals(establecimieto)){
					EvaluacionVO  evaluacion  = EvaluacionVO.crearEvaluacion(ormEvaluacion[i]);
					evaluacions.add(evaluacion);
			 }
	         }		
			Gson gson = new Gson();
			json = gson.toJson(evaluacions); }
			}
			catch (PersistentException e){
				e.printStackTrace();
			}
		 return json;	 
	 }	
	 
}
